package com.patterns.singleton;

import java.lang.reflect.Constructor;

/**
 * 反射破解非枚举单例模式
 * @author huangke
 *
 */
public class ReflexSingleton {
	public static void main(String[] args) throws Exception{
		SingletonDemo1 demo1 = SingletonDemo1.getInstance();
		SingletonDemo1 demo2 = SingletonDemo1.getInstance();
		System.out.println(demo1 == demo2);
		
		/* 反射获得新实例*/
		
		Class<SingletonDemo1> clazz = (Class<SingletonDemo1>) Class.forName("com.patterns.singleton.SingletonDemo1");
		// >> 获得无参构造器
		Constructor<SingletonDemo1> constructor = clazz.getDeclaredConstructor(null);
		// >> 跳过权限检查，让构造器可访问私有属性
		constructor.setAccessible(true);
		// >> 创建新实例
		SingletonDemo1 demo3 = constructor.newInstance();
		System.out.println(demo1 == demo3);
	}
}
